package cn.good.yan.model.controller;

import cn.good.yan.model.entity.User;
import cn.good.yan.model.service.UserService;
import org.springframework.security.access.annotation.Secured;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * 测试： 用户数据，来源于数据库
 *
 * @author shengren.yan
 * @create 2024-07-16
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    public UserService userService;

//    // 用户必须有 ADMIN 角色 并且 用户名是 admin 才能访问此方法，其他人没有权限
//    @PreAuthorize("hasRole('ADMIN') and authentication.name == 'admin'")
//    @GetMapping("/list")
//    public List<User> getList() {
//        return userService.list();
//    }
//
//    // 添加用户
//    @PostMapping("/add")
//    public void add(@RequestBody User user) {
//        userService.saveUserDetails(user);
//    }
//
//
//    // 用户必须有 USER_ADD 权限 才能访问此方法
//    @PreAuthorize("hasAuthority('USER_ADD')")
//    @GetMapping("/save")
//    public String save() {
//        return "有权限进行方法，该接口";
//    }

    @GetMapping("/ok")
    public String ok() {
        return "ok";
    }


    // 基于注解的访问控制 - 开启角色判断，在该UserDetailsServiceImpl这里配置用户权限、角色
    // 永远该角色，才可以访问该接口
    // 使用admin 123 登录，成功，访问：http://localhost:8081/user/secured 该接口，显示权限不足
    // 当在UserDetailsServiceImpl类，配置ROLE_normal,该角色后
    // 使用admin 123 登录，成功，访问：http://localhost:8081/user/secured 该接口，访问成功
    @Secured("ROLE_normal")
    @GetMapping("/secured")
    public String secured() {
        return "只有该角色，才能访问OK。。。";
    }


    // PreAuthorize 注解与 Secured 类似
    @PreAuthorize("hasRole('normal')")
    @GetMapping("/secured2")
    public String normal() {
        return "只有该角色，才能访问OK。。。";
    }




}
